// 生命周期的文件
import { patch } from './vnode/patch'
import watcher from './observe/watcher'
export function mounetComponent(vm, el) {
  //1、vm.render 将render函数变成虚拟dom
  //2、vm._updata将vnode虚拟dom变成真实dom

  callHook(vm, 'beforeMount')

  //render函数再vnode文件里面定义
  // vm._updata(vm._render())
  let updateComponent = () => {
    vm._updata(vm._render())
  }
  new watcher(vm, updateComponent, () => { }, true) //每个组件是一个watcher，此时将watcher放入到了dep中，dep中pushTarget(this)


  callHook(vm, 'mounted')
}

export function lifeCycleMixin(Vue) {
  Vue.prototype._updata = function (vnode) {
    let vm = this;
    // 旧的DOM与虚拟DOM
    vm.$el = patch(vm.$el, vnode)
  }
}

//生命周期调用
export function callHook(vm, hook) {
  // console.log('生命周期调用', vm, hook);
  let handlers = vm.$options[hook]; //获取生命周期函数 如 created
  if (handlers) {
    for (let i = 0; i < handlers.length; i++) {
      handlers[i].call(vm); //执行生命周期函数
    }
  }
}